Micron Document
🎖️GitЯра🎖️


Displaying Raw • Download

feature/firmware/src/commonTest/kotlin/org/meshtastic/feature/firmware/ota/dfu/LegacyDfuProtocolTest.kt c2a8e67aee4db8f77b7dc6924dcebfbdfba1bf5e (c2a8e67a) Text, 4.25 KB

T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tf0883e@fileTb4b4b4:Te6edf3SuppressTb4b4b4(Ta5d6ff"Ta5d6ffMagicNumberTa5d6ff"Tb4b4b4)

Tff7b72package T7ee787org.meshtastic.feature.firmware.ota.dfu

Tff7b72import T7ee787kotlin.test.Test
Tff7b72import T7ee787kotlin.test.assertContentEquals
Tff7b72import T7ee787kotlin.test.assertEquals
Tff7b72import T7ee787kotlin.test.assertIs

Tff7b72class T56d364LegacyDfuProtocolTest Tb4b4b4{

Tf0883e@Test
Tff7b72fun Td2a8ff`parse Success response`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3r Tff7b72= Te6edf3LegacyDfuResponseTb4b4b4.Te6edf3parseTb4b4b4(Te6edf3byteArrayOfTb4b4b4(T79c0ff0Te6edf3x10Tb4b4b4, T79c0ff0Te6edf3x01Tb4b4b4, T79c0ff0Te6edf3x01Tb4b4b4)Tb4b4b4)
Te6edf3assertIsTff7b72<Te6edf3LegacyDfuResponseTb4b4b4.Te6edf3SuccessTff7b72>Tb4b4b4(Te6edf3rTb4b4b4)
Te6edf3assertEqualsTb4b4b4(Te6edf3LegacyDfuOpcodeTb4b4b4.Te6edf3START_DFUTb4b4b4, Te6edf3rTb4b4b4.Te6edf3requestOpcodeTb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`parse Failure response`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3r Tff7b72= Te6edf3LegacyDfuResponseTb4b4b4.Te6edf3parseTb4b4b4(Te6edf3byteArrayOfTb4b4b4(T79c0ff0Te6edf3x10Tb4b4b4, T79c0ff0Te6edf3x02Tb4b4b4, T79c0ff0Te6edf3x06Tb4b4b4)Tb4b4b4)
Te6edf3assertIsTff7b72<Te6edf3LegacyDfuResponseTb4b4b4.Te6edf3FailureTff7b72>Tb4b4b4(Te6edf3rTb4b4b4)
Te6edf3assertEqualsTb4b4b4(Te6edf3LegacyDfuOpcodeTb4b4b4.Te6edf3INIT_DFU_PARAMSTb4b4b4, Te6edf3rTb4b4b4.Te6edf3requestOpcodeTb4b4b4)
Te6edf3assertEqualsTb4b4b4(Te6edf3LegacyDfuStatusTb4b4b4.Te6edf3OPERATION_FAILEDTb4b4b4, Te6edf3rTb4b4b4.Te6edf3statusTb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`parse PacketReceipt - little endian uint32`Tb4b4b4(Tb4b4b4) Tb4b4b4{
T8b949e// 0x12345678 = 305419896 LE: 78 56 34 12
Tff7b72val Te6edf3r Tff7b72= Te6edf3LegacyDfuResponseTb4b4b4.Te6edf3parseTb4b4b4(Te6edf3byteArrayOfTb4b4b4(T79c0ff0Te6edf3x11Tb4b4b4, T79c0ff0Te6edf3x78Tb4b4b4, T79c0ff0Te6edf3x56Tb4b4b4, T79c0ff0Te6edf3x34Tb4b4b4, T79c0ff0Te6edf3x12Tb4b4b4)Tb4b4b4)
Te6edf3assertIsTff7b72<Te6edf3LegacyDfuResponseTb4b4b4.Te6edf3PacketReceiptTff7b72>Tb4b4b4(Te6edf3rTb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff0Te6edf3x12345678LTb4b4b4, Te6edf3rTb4b4b4.Te6edf3bytesReceivedTb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`parse PacketReceipt with high bit set treats value as unsigned`Tb4b4b4(Tb4b4b4) Tb4b4b4{
T8b949e// 0xFF000000 should be parsed as 4278190080 (positive long), not -16777216 (negative int).
Tff7b72val Te6edf3r Tff7b72= Te6edf3LegacyDfuResponseTb4b4b4.Te6edf3parseTb4b4b4(Te6edf3byteArrayOfTb4b4b4(T79c0ff0Te6edf3x11Tb4b4b4, T79c0ff0Te6edf3x00Tb4b4b4, T79c0ff0Te6edf3x00Tb4b4b4, T79c0ff0Te6edf3x00Tb4b4b4, T79c0ff0Te6edf3xFFTb4b4b4.Te6edf3toByteTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4)
Te6edf3assertIsTff7b72<Te6edf3LegacyDfuResponseTb4b4b4.Te6edf3PacketReceiptTff7b72>Tb4b4b4(Te6edf3rTb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff0Te6edf3xFF000000LTb4b4b4, Te6edf3rTb4b4b4.Te6edf3bytesReceivedTb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`parse Unknown for unrecognised prefix`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3r Tff7b72= Te6edf3LegacyDfuResponseTb4b4b4.Te6edf3parseTb4b4b4(Te6edf3byteArrayOfTb4b4b4(T79c0ff0Te6edf3x42Tb4b4b4, T79c0ff0Te6edf3x99Tb4b4b4.Te6edf3toByteTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4)
Te6edf3assertIsTff7b72<Te6edf3LegacyDfuResponseTb4b4b4.Te6edf3UnknownTff7b72>Tb4b4b4(Te6edf3rTb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`parse Unknown for empty bytes`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3r Tff7b72= Te6edf3LegacyDfuResponseTb4b4b4.Te6edf3parseTb4b4b4(Te6edf3byteArrayOfTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3assertIsTff7b72<Te6edf3LegacyDfuResponseTb4b4b4.Te6edf3UnknownTff7b72>Tb4b4b4(Te6edf3rTb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`parse Unknown for too-short response`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3r Tff7b72= Te6edf3LegacyDfuResponseTb4b4b4.Te6edf3parseTb4b4b4(Te6edf3byteArrayOfTb4b4b4(T79c0ff0Te6edf3x10Tb4b4b4, T79c0ff0Te6edf3x01Tb4b4b4)Tb4b4b4)
Te6edf3assertIsTff7b72<Te6edf3LegacyDfuResponseTb4b4b4.Te6edf3UnknownTff7b72>Tb4b4b4(Te6edf3rTb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`parse Unknown for too-short packet receipt`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3r Tff7b72= Te6edf3LegacyDfuResponseTb4b4b4.Te6edf3parseTb4b4b4(Te6edf3byteArrayOfTb4b4b4(T79c0ff0Te6edf3x11Tb4b4b4, T79c0ff0Te6edf3x01Tb4b4b4, T79c0ff0Te6edf3x02Tb4b4b4)Tb4b4b4)
Te6edf3assertIsTff7b72<Te6edf3LegacyDfuResponseTb4b4b4.Te6edf3UnknownTff7b72>Tb4b4b4(Te6edf3rTb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`legacyImageSizesPayload is 12 bytes LE - app only`Tb4b4b4(Tb4b4b4) Tb4b4b4{
T8b949e// 0x1234 = 4660 → LE: 34 12 00 00
Tff7b72val Te6edf3payload Tff7b72= Te6edf3legacyImageSizesPayloadTb4b4b4(Te6edf3appSize Tff7b72= T79c0ff0Te6edf3x1234Tb4b4b4)
Te6edf3assertEqualsTb4b4b4(T79c0ff1T79c0ff2Tb4b4b4, Te6edf3payloadTb4b4b4.Te6edf3sizeTb4b4b4)
Te6edf3assertContentEqualsTb4b4b4(
Te6edf3byteArrayOfTb4b4b4(
T79c0ff0Tb4b4b4,
T79c0ff0Tb4b4b4,
T79c0ff0Tb4b4b4,
T79c0ff0Tb4b4b4, T8b949e// softdevice
T79c0ff0Tb4b4b4,
T79c0ff0Tb4b4b4,
T79c0ff0Tb4b4b4,
T79c0ff0Tb4b4b4, T8b949e// bootloader
T79c0ff0Te6edf3x34Tb4b4b4,
T79c0ff0Te6edf3x12Tb4b4b4,
T79c0ff0Tb4b4b4,
T79c0ff0Tb4b4b4, T8b949e// app
Tb4b4b4)Tb4b4b4,
Te6edf3payloadTb4b4b4,
Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`legacyImageSizesPayload with all three components`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3payload Tff7b72= Te6edf3legacyImageSizesPayloadTb4b4b4(Te6edf3appSize Tff7b72= T79c0ff1Tb4b4b4, Te6edf3softDeviceSize Tff7b72= T79c0ff2Tb4b4b4, Te6edf3bootloaderSize Tff7b72= T79c0ff3Tb4b4b4)
Te6edf3assertContentEqualsTb4b4b4(Te6edf3byteArrayOfTb4b4b4(T79c0ff2Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff3Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff1Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4)Tb4b4b4, Te6edf3payloadTb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`legacyPrnRequestPayload is opcode plus uint16 LE`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3payload Tff7b72= Te6edf3legacyPrnRequestPayloadTb4b4b4(Te6edf3packets Tff7b72= T79c0ff1T79c0ff0Tb4b4b4)
Te6edf3assertContentEqualsTb4b4b4(Te6edf3byteArrayOfTb4b4b4(Te6edf3LegacyDfuOpcodeTb4b4b4.Te6edf3PACKET_RECEIPT_NOTIF_REQTb4b4b4, T79c0ff1T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4)Tb4b4b4, Te6edf3payloadTb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ff`legacyPrnRequestPayload over 256 spans both bytes`Tb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3payload Tff7b72= Te6edf3legacyPrnRequestPayloadTb4b4b4(Te6edf3packets Tff7b72= T79c0ff0Te6edf3x1234Tb4b4b4)
Te6edf3assertContentEqualsTb4b4b4(Te6edf3byteArrayOfTb4b4b4(Te6edf3LegacyDfuOpcodeTb4b4b4.Te6edf3PACKET_RECEIPT_NOTIF_REQTb4b4b4, T79c0ff0Te6edf3x34Tb4b4b4, T79c0ff0Te6edf3x12Tb4b4b4)Tb4b4b4, Te6edf3payloadTb4b4b4)
Tb4b4b4}
Tb4b4b4}

Served by rngit 1.5.0 - Generated in 0.07s